#include<bits/stdc++.h>
using namespace std;
#define ll long long

int main(){
  int N,H;
  cin>>N>>H;
  //vector<int> hang(N+1,0);
  vector<int> cha(N+1,0);
  for(int i=1;i<=N;i++){
    int li,hi;
    cin>>li>>hi;
    cha[li]+=1;
    cha[hi+1]-=1;
  }
  vector<ll> sum(N+1,0);
  int last=0,next;
  for(int i=1;i<=N;i++){
    next=last+cha[i];
    //hang[i]=cha[i]+hang[i-1];
    last=next;
    sum[i]=sum[i-1]+next;
  }
  ll maxn=0;
  for(int i=1;i<=N-H+1;i++){
    ll x=sum[i+H-1]-sum[i-1];
    maxn=max(maxn,x);
  }
  cout<<N*H-maxn<<endl;

  return 0;
}
//题目：推箱子
//在一个高度为H的箱子前方有一个长和高均为N的障碍物。障碍物的每一列均存在一个连续的缺口。第i列的缺口为第Li到Hi个单位。现在需要清理出一条高度为H的通道，
// 以便箱子可以直接通过障碍物。请计算要清理掉的障碍物的最小面积。不需要考虑箱子会掉入某些坑中。
//输入格式：
//第一行为两个整数N和H，分别表示障碍物的尺寸和箱子的高度。1<=H<=N<=10000000。
//接下来N行，每行包含两个整数Li和Hi，分别表示第i列的缺口范围。0<=Li<=Hi<N。
//输出格式
//一个整数，表示答案。
//输入样例
// 5 2
// 2 3
// 1 2
// 2 3
// 1 2
// 2 3
//输出样例
//2